package com.permissionx.lQl

import androidx.fragment.app.FragmentActivity

// 指定成单例类是为了让PermissionX的接口更方便被调用
object PermissionX {
    private const val TAG = "InvisibleFragment"

    fun request(activity: FragmentActivity, vararg permissions: String, callback: PermissionCallback) {
        val fragmentManager = activity.supportFragmentManager
        val existedFragment = fragmentManager.findFragmentByTag(TAG)
        val fragment = if (existedFragment != null) {
            existedFragment as InvisibleFragment
        } else {
            // 创建新实例，添加到Activity，同时指定一个TAG
            val invisibleFragment = InvisibleFragment()
            // 这里使用commitNow()方法，因为commit()方法不会立即执行添加操作，
            // 无法保证下一行代码执行时此Fragment已被加到Activity
            fragmentManager.beginTransaction().add(invisibleFragment, TAG).commitNow()
            invisibleFragment
        }
        // 后续只需要调用requestNow方法就能申请运行时权限了
        // *表示将一个数组转换成可变长度参数传递过去
        fragment.requestNow(callback, *permissions)
    }
}